//package com.ChessGame.gameRules;
package com.si.entite;

public class Echiquier {

    int max = 8;
    Piece[][] listPieces = new Piece[8][8];
    Piece[] eatenPieces = new Piece[16];
    //initialisation du tableau des pieces mangées.
    
    int eatenPiecesNb = 0;
    Position posPieceCourante;
    

    public Echiquier() {
        Piece[] pieceB = {new Tour("blanc"), new Cavalier("blanc"), new Fou("blanc"), new Roi("blanc"), new Reine("blanc"), new Fou("blanc"), new Cavalier("blanc"), new Tour("blanc")};
        Piece[] pieceN = {new Tour("noir"), new Cavalier("noir"), new Fou("noir"), new Reine("noir"), new Roi("noir"), new Fou("noir"), new Cavalier("noir"), new Tour("noir")};

        listPieces[0] = pieceB;
        listPieces[7] = pieceN;
        for (int j = 0; j < max; j++) {
            listPieces[1][j] = new Pion("blanc");
            listPieces[6][j] = new Pion("noir");
        }
        
        for(int i=0; i< eatenPieces.length ; i++)
        {
            eatenPieces[i] = null;
        }
    }

    public boolean deplacer(Position posB) {
        if (this.get(posB.x, posB.y) == null) //si il n y a pas de pieces la ou le joueur veux poser sa peice selectionner
        {
            if (listPieces[posPieceCourante.x][posPieceCourante.y].validerDep(posPieceCourante, posB)) {
                //if(moveAndEat(posPieceCourante, posB)){
                listPieces[posB.x][posB.y] = listPieces[posPieceCourante.x][posPieceCourante.y];
                listPieces[posPieceCourante.x][posPieceCourante.y] = null;
                return true;//}
            }
        } else {
            if (!this.get(posB.x, posB.y).getCouleur().equals(this.get(this.getPosPieceCourante().x, this.getPosPieceCourante().y).getCouleur())) {
                this.eatenPieces[eatenPiecesNb] = this.get(posB.x, posB.y); 
                //this.set(posB.x, posB.y, null);
                listPieces[posB.x][posB.y] = listPieces[posPieceCourante.x][posPieceCourante.y];
                listPieces[posPieceCourante.x][posPieceCourante.y] = null;
                
                eatenPiecesNb++;
                return true;
            }
        }
        return false;
    }

    public boolean moveAndEat(Position initPos, Position finalPos) {
        if (listPieces[initPos.x][initPos.y] instanceof Cavalier) {
            int diffX = finalPos.x - initPos.x;
            int diffY = finalPos.y - initPos.y;

            if (diffX > diffY) {
                if (diffX > 0) {
                    if ((listPieces[finalPos.x - 1][finalPos.y] == null) && (listPieces[finalPos.x - 2][finalPos.y] == null)) {
                        return true;
                    } else {
                        if (!listPieces[initPos.x][initPos.y].getCouleur().equals(listPieces[finalPos.x - 1][finalPos.y].getCouleur())) {
                            listPieces[finalPos.x - 1][finalPos.y] = null;
                            return true;
                        }
                        if (listPieces[initPos.x][initPos.y].getCouleur().equals(listPieces[finalPos.x - 2][finalPos.y].getCouleur())) {
                            return false;
                        }
                    }
                }
            }

        }


        return false;
    }

    public void selectionnee(Position pos) {
        posPieceCourante = pos;

    }

    
    public void set(int i, int j, Piece o) {
         this.listPieces[i][j] = o;
    }
    
    public Piece get(int i, int j) {
        return this.listPieces[i][j];
    }

    public Piece[][] getListPieces() {
        return listPieces;
    }

    public Position getPosPieceCourante() {
        return posPieceCourante;
    }
    
    public void setPosPieceCourante(Position posPieceCourante) {
        this.posPieceCourante = posPieceCourante;
    }
    
    public Piece[] getEatenPieces()
    {
        return this.eatenPieces;
    }
    
    public void setListPieces(Piece[][] listPieces) {
        this.listPieces = listPieces;
    }

    
}
